package com.example.leetcode.double_pointer;

class Solution_540 {
    public static void main(String[] args) {
        Solution_540 solution_540 = new Solution_540();
        int[] nums =new int[]{3,3,7,7,10,11,11};
        solution_540.singleNonDuplicate(nums);
    }

    public int singleNonDuplicate(int[] nums) {
        int left = 0 ;
        int right = nums.length - 1;
        int temp;

        while(left < right ){
            // 获取中值
            int mid = (left + right) / 2;

            //找到唯一的只会出现一次的数
            if(nums[mid] != nums[mid - 1] && nums[mid] != nums[mid + 1]){
                return nums[mid];
            }
            // 中值等于中值的前一个值
            if(nums[mid] == nums[mid - 1]){
                // 获取右区间的元素个数
                temp = right - mid;
                // 判断该区间的元素个数是偶数还是奇数
                //偶数
                if(temp % 2 == 0){
                    right = mid;
                }else{
                    left = mid + 1;
                }
                // 中值等于中值的后一个值
            }else if(nums[mid] == nums[mid + 1]){
                // 获取右区间的元素个数
                temp = right - mid - 1;
                // 判断该区间的元素个数是偶数还是奇数
                // 偶数
                if(temp % 2 == 0){
                    right = mid + 1;
                }else{
                    left = mid + 2;
                }
            }
        }
        return 0;
    }
}